class Solution {
public:
  int maxProduct(vector<int>& nums) {

    int n = nums.size();
    int numMax = nums[0];
    int numMin = nums[0];
    int p = numMax;

    for(int i = 1; i < n; ++i){
      if(nums[i] < 0){
        swap(numMax, numMin);
      }
      numMax = max(nums[i], numMax * nums[i]);
      numMin = min(nums[i], numMin * nums[i]);
      p = max(numMax, p);
    }

    return p;

  }
};